# 从app.models导入User模型
from app.models import User
# 函数定义与参数：
# 函数名为changeSelfInfo，接收三个参数，分别是username（用户名，用于定位具体的用户记录）、formData以及file
def changeSelfInfo(username,formData,file):
    # 首先使用print(formData)打印出表单数据，是用于调试目的，方便查看传入的数据内容。
    print(formData)
    # 获取用户对象：
    # 通过User.objects.get(username=username)从数据库中获取指定用户名对应的User模型实例。
    # User是一个继承自 Django 的models.Model类的模型，用于与数据库中的用户表进行交互，
    # get方法用于精确查找满足条件（此处是用户名匹配）的单一记录，如果找不到对应记录会抛出异常（例如DoesNotExist异常）。
    user = User.objects.get(username=username)
    # 更新用户信息：
    # 从formData字典中取出相应的键值对来更新用户对象的属性。将formData里的address值赋给user.address，sex值赋给user.sex。
    user.address = formData['address']
    user.sex = formData['sex']
    # 对于textarea字段，先进行了一个条件判断if formData['textarea']:，只有当formData中textarea键对应的值存在
    # （不为空、False、None等类似代表 “无值” 的情况）时，才将其赋给user.textarea。
    if formData['textarea']:
        user.textarea = formData['textarea']
    # 对于文件相关部分，判断file.get('avatar')!= None，也就是如果file对象中通过get方法获取到的avatar（头像文件）不为空，
    # 就将其赋给user.avatar，这里假设user.avatar是用于存储用户头像相关数据（比如文件路径等）的字段属性。
    if file.get('avatar') != None:
        user.avatar = file.get('avatar')
    # 保存用户对象：
    # 最后调用user.save()方法将更新后的用户对象保存回数据库，这样数据库中对应的用户记录就会被更新为新的信息。
    user.save()
# 函数定义与参数：
# 函数名为getChangePassword，接收两个参数，userInfo（包含当前用户相关信息的对象，已经包含了用户名等基础信息）
# 和passwordInfo（包含用户输入的密码相关信息的字典，旧密码、新密码以及确认新密码等）。
def getChangePassword(userInfo,passwordInfo):
    # 获取用户对象与密码验证：
    # 首先从passwordInfo字典中分别取出oldPassword、newPassword、newPasswordConfirm的值并赋值给对应的变量，方便后续进行逻辑判断。
    # 通过User.objects.get(username=userInfo.username)从数据库获取对应的用户对象，和前面changeSelfInfo函数中获取用户对象的逻辑类似。
    oldPwd = passwordInfo['oldPassword']
    newPwd = passwordInfo['newPassword']
    newPwdConfirm = passwordInfo['newPasswordConfirm']
    user = User.objects.get(username=userInfo.username)
    # 接着进行了两个重要的密码验证逻辑判断：
    # 第一个判断if
    # oldPwd != userInfo.password:，对比用户输入的旧密码和数据库中存储的当前用户的密码（通过userInfo.password获取，
    # 这里假设userInfo对象可以直接访问密码属性），如果不相等，就返回'原始密码不正确'的提示信息，意味着密码修改操作无法继续进行。
    if oldPwd != userInfo.password:return '原始密码不正确'
    # 第二个判断if newPwd!= newPwdConfirm:，对比用户两次输入的新密码是否一致，如果不一致，
    # 返回'两次密码输入不正确'提示信息，同样也会终止密码修改流程。
    if newPwd != newPwdConfirm :return '两次密码输入不正确'
    # 更新密码并保存：
    # 如果前面的密码验证都通过了，就将用户对象的password属性更新为新密码（user.password = newPwd），然后调用user.save()方法
    # 将更新后的用户对象保存回数据库，从而完成密码修改的持久化操作。
    user.password = newPwd
    user.save()
